#ifndef __APP_MESSAGE_H
#define __APP_MESSAGE_H

//一个确定和下游设备的连接类型
typedef enum
{
    CONNECT_NONE = 0,   //没有连接
    CONNECT_BT,         //蓝牙    
    CONNECT_LORA,       //lora
    CONNECT_CAN         //can
}ConnectType;


//创建一个message格式的消息  
typedef struct 
{
    ConnectType connect_type;     //和下游设备的连接类型
    unsigned char * ptr;          //接受数据的指针
    int id_len;                   //id的字节长度
    int mag_len;                  //实际数据的字节长度     id_len + mag_len == strlen(ptr);
}Message;

/**
 * brief 把一个josn格式转换成message格式
 *
 * param 
 * param 
 * return  成功返回0  失败返回-1
 */
int app_message_JosnTrunMessage(Message *message,char *json,int len);

/**
 * brief 把一个message格式转换成json
 *
 * param 
 * param 
 * return 成功返回0  失败返回-1
 */

int app_message_MessageTrunJosn(Message *message,void *ptr,int len);


/// @brief 把一个message  转化成  bin格式
/// @param message 
/// @param bin 
/// @param len 
/// @return  成功返回长度  失败返 -1
int app_message_MessageTrunByte(Message *message,void * bin,int len);


/// @brief 把一个 byte转换成message
/// @param message 
/// @param bin 
/// @param len 
/// @return  成功返0  失败返 -1
int app_message_ByteTrunMessage(Message *message,void * bin,int len);


/// @brief 释放message的内存
/// @param message 
void app_message_free(Message * message);

#endif